﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Tibet.Entidades;
using Tibet.Datos;

namespace Tibet.Datos
{
    public static class PerfilReglasProyecto
    {
        public static PerfilRegla buscarReglas(int idProyecto)
        {
            Conexion bd = InstanciarConexion();
            SqlCommand command = new SqlCommand();
            PerfilRegla perfil = new PerfilRegla();
            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[BuscaPerfilProyecto]"; // dado un perfil de reglas retorna las reglas que estan asociadas
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@Proyecto", idProyecto);
                SqlDataReader reader = command.ExecuteReader();
                if (reader.HasRows)
                    while (reader.Read())
                    {
                        int idregla = reader.GetInt32(0);
                        string nombreregla = reader.GetString(1);
                        string tiporegla = reader.GetString(2);
                        string descripcion = reader.GetString(3);                        
                        Resultado result = new Resultado();
                        if (tiporegla == "Parentesis")
                        {
                            if (nombreregla == "ParentesisCEF")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ParentesisCEF");
                            }
                            else if (nombreregla == "ParentesisSE")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ParentesisSE");
                            }
                            else if (nombreregla == "ParentesisEX")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ParentesisEX");
                            }
                            else if (nombreregla == "ParentesisIN")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ParentesisIN");
                            }
                        }
                        else if (tiporegla == "Operadores")
                        {
                            if (nombreregla == "ConEspacio")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ConEspacio");
                            }
                            else if (nombreregla == "SinEspacio")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("SinEspacio");
                            }
                        }
                        else if (tiporegla == "NombreClase")
                        {
                            if (nombreregla == "Mayuscula_NoUnderscore")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("Mayuscula_NoUnderscore");
                            }
                            else if (nombreregla == "Mayuscula_SiUnderscore")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("Mayuscula_SiUnderscore");
                            }
                            else if (nombreregla == "Minuscula_NoUnderscore")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("Minuscula_NoUnderscore");
                            }
                            else if (nombreregla == "Minuscula_SiUnderscore")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("Minuscula_SiUnderscore");
                            }
                        }
                        else if (tiporegla == "Llaves")
                        {
                            if (nombreregla == "regla_LlavesSolas")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("regla_LlavesSolas");
                            }
                            else if (nombreregla == "regla_LlavesJuntas")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("regla_LlavesJuntas");
                            }
                            else if (nombreregla == "regla_LlavesCompJS")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("regla_LlavesCompJS");
                            }
                            else if (nombreregla == "regla_LlavesCompSJ")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("regla_LlavesCompSJ");
                            }
                        }
                        else if (tiporegla == "Documentacion")
                        {
                            if (nombreregla == "ComentarClase")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ComentarClase");
                            }
                            else if (nombreregla == "ComentarEstructura")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ComentarEstructura");
                            }
                            else if (nombreregla == "ComentarBoilerPlate")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ComentarBoilerPlate");
                            }
                            else if (nombreregla == "ComentarMetodo")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("ComentarMetodo");
                            }
                        }
                        else if (tiporegla == "NombreAtributo")
                        {
                            if (nombreregla == "AtributoMayuscula")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("AtributoMayuscula");
                            }
                            else if (nombreregla == "AtributoMinuscula")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("AtributoMinuscula");
                            }
                        }
                        else if (tiporegla == "NombreMetodo")
                        {
                            if (nombreregla == "MetodoM")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("MetodoM");
                            }
                            else if (nombreregla == "MetodoN")
                            {
                                perfil.idRegla.Add(idregla);
                                perfil.nombreRegla.Add("MetodoN");
                            }
                        }
                    }
                else
                    Console.WriteLine("No rows returned.");
                reader.Close();
                bd.CerrarConexionBd();
            }
            catch (Exception)
            {
                bd.CerrarConexionBd();
                return null;
            }
            return perfil;
        }
        private static Conexion InstanciarConexion()
        {
            Conexion nueva = new Conexion();
            return (nueva);
        }
        
    }
}